package com.all.config;

import com.github.benmanes.caffeine.cache.Caffeine;
import com.google.common.cache.CacheBuilder;
import java.util.concurrent.TimeUnit;

/**
 * @Author LY
 * @create 2024/6/3 14:58
 * @Description 本地缓存工厂
 */
public class LocalCacheFactory {

    /**
     * 构建Guava本地缓存
     */
    public static <K, V> com.google.common.cache.Cache<K, V> getGuavaLocalCache(){
        return CacheBuilder.newBuilder()
                .initialCapacity(15) // 初始容量大小
                .concurrencyLevel(5) // 设置最大并发写操作线程数
                .expireAfterWrite(5, TimeUnit.SECONDS) // 设定写入过期时间
                .build();
    }

    /**
     * 构建Caffeine本地缓存 同步
     */
    public static com.github.benmanes.caffeine.cache.Cache<Object, Object> getCaffeineLocalCacheSync(){
        return Caffeine.newBuilder()
                .initialCapacity(15) // 初始容量大小
                .expireAfterWrite(5, TimeUnit.SECONDS) // 设定写入过期时间
                .build();
    }

    /**
     * 构建Caffeine本地缓存 异步
     */
    public static com.github.benmanes.caffeine.cache.AsyncCache<Object, Object> getCaffeineLocalCacheAsync(){
        return Caffeine.newBuilder()
                .initialCapacity(15) // 初始容量大小
                .expireAfterWrite(5, TimeUnit.SECONDS) // 设定写入过期时间
                .buildAsync();
    }
}
